package app

import (
	"context"

	"github.com/glennliao/apijson-go"
	"github.com/glennliao/apijson-go/config"
	jsonConfig "github.com/glennliao/apijson-go/drivers/json/config"
	"github.com/glennliao/bookmark/app/inits"
	"github.com/glennliao/table-sync/tablesync"
	"github.com/gogf/gf/v2/frame/g"
)

func init() {
	config.Z注册访问列表提供者("json", jsonConfig.F访问列表提供者(nil, inits.AccessConfigJson))
	config.Z注册请求列表提供者("json", jsonConfig.Q请求列表提供者(nil, inits.RequestConfigJson))
}

func App(上下文 context.Context, api实例 *apijson.APIJSON) {

	api实例.H获取配置().F访问控制.T条件处理函数 = 访问条件
	api实例.H获取配置().F访问控制.M默认角色函数 = 角色权限
	api实例.H获取配置().F访问列表提供者 = "json"
	api实例.H获取配置().Q请求列表提供者 = "json"
	api实例.H获取配置().F访问控制.T添加角色([]string{角色群组管理员, 角色群组成员})

	初始化数据库(上下文)
	初始化钩子(api实例)
	初始化行键生成器(api实例)
	初始化函数(api实例)

	C初始化令牌()
}

func 初始化数据库(上下文 context.Context) {
	数据库 := g.DB()
	同步器 := tablesync.Syncer{Tables: inits.Tables()}
	错误 := 同步器.Sync(上下文, 数据库)
	if 错误 != nil {
		panic(错误)
	}
}
